package com.bonshotels.DataLayer.CtrlDadesHibernate;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import org.hibernate.Query;
import org.hibernate.Session;

import com.bonshotels.DomainLayer.CtrlDades.ICtrlPoblacio;
import com.bonshotels.DomainLayer.DomainModel.Poblacio;
import com.bonshotels.Excepcions.PoblacioNoExisteix;

/**
 * Aquesta classe es la implementacio concreta per a Hibernate de ICtrlPoblacio, es un producte
 * concret dins del patro factoria abstracta.
 * @autor Marc Mauri Alloza
 */
class CtrlPoblacioHibernate extends CtrlGeneralHibernate implements ICtrlPoblacio {
	
	/* (non-Javadoc)
	 * @see com.bonshotels.DomainLayer.CtrlDades.ICtrlPoblacio#obte(java.lang.String)
	 */
	@Override
	public Poblacio obte(String nom) throws PoblacioNoExisteix {
		Session session = getSession();
		Poblacio pob = (Poblacio) session.get(Poblacio.class, nom);
		if (pob == null) throw new PoblacioNoExisteix();
		return pob;
	}

	/* (non-Javadoc)
	 * @see com.bonshotels.DomainLayer.CtrlDades.ICtrlPoblacio#existeix(java.lang.String)
	 */
	@Override
	public boolean existeix(String nom) {
		Query query = getSession().createQuery("select * from Poblacio where nom = :nom");
		query.setParameter("nom", nom);
		return query.list().size() == 1;
	}

	/* (non-Javadoc)
	 * @see com.bonshotels.DomainLayer.CtrlDades.ICtrlPoblacio#obteTots()
	 */
	@Override
	public Set<Poblacio> obteTots() {
		Collection<Poblacio> pobs = getSession().createCriteria(Poblacio.class).list();
		return new HashSet<Poblacio>(pobs);
	}

}
